package day05;

import java.util.Arrays;

//此类是用于验证Arrays工具类的测试Demo
public class ArrayDemo4 {
    public static void main(String[] args) {
        //Arrays这个类是java自带的一个管理数组的工具类（工具箱），里边有很多方法
        /*
        Arrays. toString（数组名）：用于将数组的元素转换为字符串类型，方便打印
        Arrays. sort（数组名）：用于对数组的元素进行升序排序（从左到右，越来越大）
        Arrays. copyOf（旧数组，新长度）：用于复制数组
         */

        //声明一个数组a,并且为数组a赋值
        int[] a = {10, 5, 2, 45, 89, 100};
        System.out.println(a);      //打印数组的地址值
        //方式一：使用for循环遍历数组
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }

        //方式二：使用Arrays.toString（数组名）方法，完成数组元素的输出和，但是需要配合sout方法
        System.out.println(Arrays.toString(a));//输出数组a的每个元素

        //对数组的元素进行升序排序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));//使用toString方法输出升序后的数组元素值

        //Arrays.copyOf(旧数组，新长度）用于复制数组
        //如果目标数组长度 大于 源数组长度， 多出部分采用数组数据类型的默认值填充
        //如果目标数组长度 小于 源数组长度， 从左向右复制，多余的部分舍弃
        int[] a1 = {1, 14, 25, 36, 18};
        System.out.println("a1数组的元素为：" + Arrays.toString(a1));
        int[] b1 = Arrays.copyOf(a1, 5);      //使用a1数组赋值b1数组，等长复制
        //遍历b1数组
        System.out.println("b1数组的元素为：" + Arrays.toString(b1));

        //新数组长度 大于 源数组长度
        //使用a1数组赋值c1数组，c1数组长度为7
        int[] c1 = Arrays.copyOf(a1, 7);
        System.out.println("c1数组的元素为：" + Arrays.toString(c1));

        //新数组长度 小于 源数组长度
        //使用a1数组复制d1数组，d1数组长度为3
        int[] d1 = Arrays.copyOf(a1, 3);
        System.out.println("d1数组的元素为：" + Arrays.toString(d1));

        //数组的长度在创建数组后是不可改变的，数组元素的内存空间是连续的
        //所谓扩容是指创建一个更大的新数组并将源数组的内容复制进去
        int[] a2 = {1, 5, 6, 2, 18};
        System.out.println("a2扩容前的元素为：" + Arrays.toString(a2));
        System.out.println("a2扩容前地址值为：" + a2);
        a2 = Arrays.copyOf(a2, 6);      //数组的”扩容“
        System.out.println("a2扩容后的元素为：" + Arrays.toString(a2));
        System.out.println("a2扩容后地址值为：" + a2);




        /*
        总结：
        数组
         */
    }
}
